/**
 * 
 * 旋转数组的最小数字
 * 
 * 描述

有一个长度为 n 的非降序数组，比如[1,2,3,4,5]，将它进行旋转，即把一个数组最开始的若干个元素搬到数组的末尾，变成一个旋转数组，比如变成了[3,4,5,1,2]，或者[4,5,1,2,3]这样的。请问，给定这样一个旋转数组，求数组中的最小值。

数据范围：
1
≤
n
≤
10000
1≤n≤10000，数组中任意元素的值: 
0
≤
v
a
l
≤
10000
0≤val≤10000
要求：空间复杂度：
O
(
1
)
O(1) ，时间复杂度：
O
(
l
o
g
n
)
O(logn)

 */
public class 旋转数组的最小数字 {
    
    public static void main(String[] args) {
        
        int[] nums = new int[]{2,2,2,1,2};

        System.out.println(minNumberInRotateArray(nums));
    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public static int minNumberInRotateArray (int[] nums) {
        // write code here

        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = (left + right) / 2;
            if (nums[mid] > nums[right]) {
                left = mid + 1;
            } else if(nums[mid] == nums[right]) {
                right--;
            } else{
                right = mid;
            }
        }
        return nums[left];
    }
}
